#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include "stu_mis.h"

int check_num(int num);

void stu_add()
{
	struct student s;

	int fd = open("student_info.txt", O_WRONLY | O_CREAT | O_APPEND, 0664);
	if (fd == -1)
	{
		perror("open file fail!");
		return;
	}

	while (1)
	{
		printf("请输入学生姓名：");
		if (1 == scanf("%s", s.name))
		{
			break;
		}
		printf("输入错误，请从新输入！\n");
		fflush(stdin); // 刷新输入缓冲区
		// 文件描述符 0 通常是标准输入（STDIN），1 是标准输出（STDOUT），2 是标准错误输出（STDERR）。
	}

	while (1)
	{
		printf("请输入学生学号：");
		if (1 == scanf("%d", &s.num))
		{
			if (s.num < STU_NUM_MIN || s.num > STU_NUM_MAX)
			{
				printf("输入范围错误，请从新输入！\n");
				continue;
			}
			if (check_num(s.num) == 1)
			{
				printf("输入学号重复，请从新输入！\n");
				continue;
			}
			break;
		}
		printf("输入错误，请从新输入！\n");
		fflush(stdin); // 刷新输入缓冲区
	}
	while (1)
	{
		printf("请输入学生性别（男OR女）：");
		if (1 == scanf("%s", s.sex))
		{
			if ((strcmp(s.sex, "男") != 0) && (strcmp(s.sex, "女") != 0))
			{
				printf("输入错误，请重新输入！\n");
				continue;
			}
			break;
		}
		printf("输入错误，请从新输入！\n");
		fflush(stdin); // 刷新输入缓冲区
	}
	while (1)
	{
		printf("请输入学生成绩：");
		if (1 == scanf("%f", &s.grades))
		{
			break;
		}
		printf("输入错误，请从新输入！\n");
		fflush(stdin); // 清空输入缓冲区
	}

	int fw = write(fd, &s, sizeof(s));
	if (fw == -1)
	{
		perror("write file fail!");
		return;
	}

	close(fd);

	return;
}

int check_num(int num)
{
	struct student s;
	int ret = 0;
	int fd = open("student_info.txt", O_RDONLY);

	while (read(fd, &s, sizeof(s)) == sizeof(s))
	{
		if (s.num == num)
		{
			ret = 1;
			break;
		}
	}

	close(fd);
	return ret;
}
